/*
 * Em desenvolvimento!!!
 * 
 */
package control;

import dao.ImovelDao;
import java.io.ByteArrayInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
//import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import model.Imovel;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;

/**
 *
 * @author Elizangela
 */
@ManagedBean(name = "imovelBean")
@ViewScoped
public class ImovelBean implements Serializable {

    private ImovelDao imovelDao;
    private Imovel imovel = new Imovel();
    //private DataModel<Imovel> imoveis;
    private StreamedContent imagem;
    private Imovel selectedImovel;
    private Imovel[] selectedImoveis;
    private List<Imovel> imoveis;

    public ImovelBean() {
    }

    public void novo() {
        imovel = new Imovel();
        imagem = new DefaultStreamedContent();
    }
   
    public void limpaImagem() {
        this.imagem = new DefaultStreamedContent();
    }

    public StreamedContent getImagem() {
        return imagem;
    }

    public void setImagem(StreamedContent imagem) {
        this.imagem = imagem;
    }

    public void handleFileUpload(FileUploadEvent event) {
        try {
            imagem = new DefaultStreamedContent(event.getFile().getInputstream());
            byte[] foto = event.getFile().getContents();
            int valor = event.getFile().getFileName().length();//length para evitar problemas com arquivos de nomes iguais
            String nomeArquivo = Integer.toString(valor) + event.getFile().getFileName();
            String arquivo = "C:/xampp/htdocs/ForHent/web/tema/uploads/" + nomeArquivo;
            criaArquivo(foto, arquivo);
            this.imovel.setCaminho(nomeArquivo);
            this.imovel.setFoto(foto);
            FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");
            FacesContext.getCurrentInstance().addMessage(null, msg);

        } catch (IOException ex) {
            Logger.getLogger(ImovelBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void criaArquivo(byte[] bytes, String arquivo) {
        FileOutputStream fos;
        try {
            fos = new FileOutputStream(arquivo);
            fos.write(bytes);
            fos.close();

        } catch (FileNotFoundException ex) {
            Logger.getLogger(ImovelBean.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(ImovelBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public Imovel getImovel() {
        return imovel;
    }

    public String inserir() {
        String resultado = "falha";
        imovelDao = new ImovelDao();
        boolean retorno = imovelDao.inserir(imovel);
        if (retorno) {
            resultado = "imoveis";
        }
        return resultado;

    }

    public String alterar() {
        String resultado = "falha";
        imovelDao = new ImovelDao();
        boolean retorno = imovelDao.alterar(imovel);
        if (retorno) {
            resultado = "imoveis";
        }
        return resultado;
    }

    public String remover() {
        String resultado = "falha";
        imovelDao = new ImovelDao();
        boolean retorno = imovelDao.remover(imovel);
        if (retorno) {
            resultado = "imoveis";
        }
        return resultado;
    }

    public Imovel getSelectedImovel() {
        return selectedImovel;
    }

    public void setSelectedImovel(Imovel selectedImovel) {
        this.selectedImovel = selectedImovel;
    }

    public List<Imovel> getImoveis() {
        imovelDao = new ImovelDao();
        imoveis = imovelDao.listar();
        return imoveis;
    }

    public void converte(byte[] foto) {
        imagem = new DefaultStreamedContent(new ByteArrayInputStream(foto));

    }
    
}